package com.me.study.javaCore.jni;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

/**
 * JNI 示例：
 * 1，编译之后根据 class 文件生成 c++ 头文件：（进入 testME\testJDK8\target\classes 目录执行）
 *      javah -jni com.me.study.javaCore.jni.NativeEncryptUtils
 * 2，运行时需要在 VM 参数中指定 本地库路径：-Djava.library.path=testJDK8\target\classes\dll
 */
public class NativeEncryptUtils {

    static {
        System.out.println("user.dir：" + System.getProperty("user.dir"));
        System.out.println("当前dll加载路径：" + System.getProperty("java.library.path"));


        String osName = System.getProperty("os.name").toLowerCase();
        if (osName.contains("win")) {
            // Windows平台
            // TODO 加载本地库，淦淦淦！！！要按依赖顺序倒过来加载
            System.loadLibrary("zlib1");
            System.loadLibrary("libcurl");
        }
        System.loadLibrary("NativeEncrypt");
    }

    /**
     * 解密字节数组
     */
    public static native byte[] decrypt(byte[] encryptedData);

    public static void main(String[] args) throws IOException {
        String filePath = ClassEncryptUtil.DEST_FILE_PATH;
        String targetFile = "C:\\Users\\bin.yin\\Desktop\\img2\\par2-new.jpg";
        // String filePath = "par2-temp.jpg";
        // String targetFile = "par2-new.jpg";

        File file = new File(filePath);
        if (!file.exists()) {
            throw new IOException("文件不存在: " + filePath);
        }
        byte[] bytes = decrypt(Files.readAllBytes(new File(filePath).toPath()));
        Files.write(new File(targetFile).toPath(), bytes);
    }

}
